<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
    <meta name="referrer" content="never">
    <title>立即执行函数</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        ul {
            list-style: none;
        }
    </style>
</head>
<body>
    
    <script type="text/javascript">
        /* 
        立即执行函数： 让函数立即执行
            创建封闭函数作用域，固定一部分参数的值，常用于for循环调用函数使用下标i

            写法：前后加 ; ，保护己方代码
        */

        var a = 10;
        
        ;(function (){
            console.log("匿名函数立即执行1");
        })();

        (function (){
            console.log("匿名函数立即执行2");
        }());

        (function fn(){
            console.log("声明函数的立即执行与匿名函数立即执行一致");
        }());

        // 计算函数的返回值赋予前面的变量
        var f = function (){
            console.log("函数表达式的立即执行");
        }();

        console.log(f); // undefined

        // 忍者代码的立即执行  !值 + - ~取反-1
        !function (){
            console.log("忍者代码的立即执行");
            return 12;
        }();

        console.clear();

        var arr = [];
        for(var i = 0; i < 10; i ++){
            (function (a){
                arr.push(function (){
                    console.log(a);
                });
            })(i);
        }

        arr[3](); // 3
        arr[4](); // 4
    </script>
</body>
</html>